package bazeczka;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.List;


 
public class BazeczkaRozwalka {
 
	 public static final String DRIVER = "org.sqlite.JDBC";
	 public static final String DB_URL = "http://www.db4free.net/";
	 public static final String USER = "forummat";
	 public static final String password = "forum123";
	 
	 private Connection conn;
	 private Statement stat;
	 
	    public BazeczkaRozwalka() {
	        try {
	            Class.forName(BazeczkaRozwalka.DRIVER);
	        } catch (ClassNotFoundException e) {
	            System.err.println("Brak sterownika JDBC");
	            e.printStackTrace();
	        }
	 
	        try {
	            conn = DriverManager.getConnection(DB_URL);
	            stat = conn.createStatement();
	        } catch (SQLException e) {
	            System.err.println("Problem z otwarciem polaczenia");
	            e.printStackTrace();
	        }
	 
	        createTables();
	    }
	 
	    public boolean createTables()  {
	        String createPodatek = "CREATE TABLE IF NOT EXISTS podatek (id podatku INTEGER PRIMARY KEY AUTOINCREMENT, imie varchar(255), nazwisko varchar(255), pesel int)";
	        String createTowar = "CREATE TABLE IF NOT EXISTS towar (id ksiarzki INTEGER PRIMARY KEY AUTOINCREMENT, tytul varchar(255), autor varchar(255))";
	        String createSmietnik = "CREATE TABLE IF NOT EXISTS smietik (id smietnik INTEGER PRIMARY KEY AUTOINCREMENT, id_czytelnika int, id_ksiazki int)";
	        try {
	            stat.execute(createPodatek);
	            stat.execute(createTowar);
	            stat.execute(createSmietnik);
	        } catch (SQLException e) {
	            System.err.println("Blad przy tworzeniu tabeli");
	            e.printStackTrace();
	            return false;
	        }
	        return true;
	    }
	 
	    public boolean insertTowar(String kategoria_glowna, String podkategoria, String Szczegol) {
	        try {
	            PreparedStatement prepStmt = conn.prepareStatement(
	                    "insert into towar values (NULL, ?, ?, ?);");
	            prepStmt.setString(1, kategoria_glowna);
	            prepStmt.setString(2, podkategoria);
	            prepStmt.setString(3, Szczegol);
	            prepStmt.execute();
	        } catch (SQLException e) {
	            System.err.println("Blad przy wstawianiu towaru");
	            e.printStackTrace();
	            return false;
	        }
	        return true;
	    }
	 
	    public boolean insertPodatek(String nazwaPodatku, double podatek) {
	        try {
	            PreparedStatement prepStmt = conn.prepareStatement(
	                    "insert into podatek values (NULL, ?, ?);");
	            prepStmt.setString(1, nazwaPodatku);
	            prepStmt.setDouble(2, podatek);
	            prepStmt.execute();
	        } catch (SQLException e) {
	            System.err.println("Blad przy wprowadzaniu podatku");
	            return false;
	        }
	        return true;
	    }
	 
	    public boolean insertSmietnik(int idTowatu, int idPodatku) {
	        try {
	            PreparedStatement prepStmt = conn.prepareStatement(
	                    "insert into smietnik values (NULL, ?, ?);");
	            prepStmt.setInt(1, idTowatu);
	            prepStmt.setInt(2, idPodatku);
	            prepStmt.execute();
	        } catch (SQLException e) {
	            System.err.println("Blad przy smietnik");
	            return false;
	        }
	        return true;
	    }
	 
	    public List<Towar> selectTowary() {
	        List<Towar> towarek = new LinkedList<Towar>();
	        try {
	            ResultSet result = stat.executeQuery("SELECT * FROM towary");
	            int id;
	            String kategoria_glowna, podkategoria, Szczegol;
	            while(result.next()) {
	                id = result.getInt("id_czytelnika");
	                kategoria_glowna = result.getString("kategoria_glowna");
	                podkategoria = result.getString("podkategoria");
	                Szczegol = result.getString("Szczegol");
	                towarek.add(new Towar(id, kategoria_glowna, podkategoria, Szczegol));
	            }
	        } catch (SQLException e) {
	            e.printStackTrace();
	            return null;
	        }
	        return towarek;
	    }
	 
	    public List<Podatek> selectPodatek() {
	        List<Podatek> podatek = new LinkedList<Podatek>();
	        try {
	            ResultSet result = stat.executeQuery("SELECT * FROM podatek");
	            int id;
	            String nazwaPodatku;
	            double podatek_;
	            while(result.next()) {
	                id = result.getInt("idTowatu");
	                nazwaPodatku = result.getString("nazwaPodatku");
	                podatek_ = result.getDouble("podatek");
	               podatek.add(new Podatek(id,nazwaPodatku,podatek_));
	            }
	        } catch (SQLException e) {
	            e.printStackTrace();
	            return null;
	        }
	        return podatek;
	    }
	 
	    public void closeConnection() {
	        try {
	            conn.close();
	        } catch (SQLException e) {
	            System.err.println("Problem z zamknieciem polaczenia");
	            e.printStackTrace();
	        }
	    }
}